<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
		假定我们需要建造一个车，车这个产品是由多个部件组成，车身、引擎、轮胎。汽车制造厂一般不会自己完成每个部件的制造，<br>
		而是把部件的制造交给对应的汽车零部件制造商，自己只进行装配，最后生产出整车。整车的每个部件都是一个相对独立的个体，<br>
		都具有自己的生产过程，多个部件经过一系列的组装共同组成了一个完整的车。
	</body>
	<script>
		// 建造者，汽车部件厂家，提供具体零部件的生产
		function CarBuilder({
			color = 'white',
			weight = 0
		}) {
			this.color = color
			this.weight = weight
		}

		// 生产部件，轮胎
		CarBuilder.prototype.buildTyre = function(type) {
			const tyre = {}
			switch(type) {
				case 'small':
					tyre.tyreType = '小号轮胎'
					tyre.tyreIntro = '正在使用小号轮胎'
					break
				case 'normal':
					tyre.tyreType = '中号轮胎'
					tyre.tyreIntro = '正在使用中号轮胎'
					break
				case 'big':
					tyre.tyreType = '大号轮胎'
					tyre.tyreIntro = '正在使用大号轮胎'
					break
			}
			this.tyre = tyre
		}

		// 生产部件，发动机
		CarBuilder.prototype.buildEngine = function(type) {
			const engine = {}
			switch(type) {
				case 'small':
					engine.engineType = '小马力发动机'
					engine.engineIntro = '正在使用小马力发动机'
					break
				case 'normal':
					engine.engineType = '中马力发动机'
					engine.engineIntro = '正在使用中马力发动机'
					break
				case 'big':
					engine.engineType = '大马力发动机'
					engine.engineIntro = '正在使用大马力发动机'
					break
			}
			this.engine = engine
		}
		/* 奔驰厂家，负责最终汽车产品的装配 */
		function benChiDirector(tyre, engine, param) {
			var _car = new CarBuilder(param)
			_car.buildTyre(tyre)
			_car.buildEngine(engine)
			return _car
		}

		// 获得产品实例
		var benchi1 = benChiDirector('small', 'big', {
			color: 'red',
			weight: '1600kg'
		})

		console.log(benchi1)

		// 输出：
		// {
		//   color: "red"
		//   weight: "1600kg"
		//   tyre: Tyre {tyreType: "小号轮胎", tyreIntro: "正在使用小号轮胎"}
		//   engine: Engine {engineType: "大马力发动机", engineIntro: "正在使用大马力发动机"}
		// }
	</script>

</html>